package org.seedltd.upms.service.sys;

import java.util.List;
import java.util.Set;

import org.seedltd.core.base.BasePage;
import org.seedltd.core.base.IBaseService;
import org.seedltd.upms.model.sys.entity.SysRole;
import org.seedltd.upms.model.sys.form.SysRoleForm;
import org.seedltd.upms.model.sys.form.SysRoleSearchForm;
import org.seedltd.upms.model.sys.vo.SysRoleVO;

/**
 * 角色管理业务接口
 *
 * @author laizuan
 * @version 1.0
 * @since 2021/07/19
 */
public interface SysRoleService extends IBaseService<SysRole> {

    /**
     * 通过主键获取数据
     *
     * @param id 主键
     * @return 数据
     */
    SysRoleVO findById(Long id);

    /**
     * 通过角色代码获取角色对象
     * @param roleCode 角色代码
     * @return
     */
    SysRole findByRoleCode(String roleCode);

    /**
     * 根据角色主键获取菜单主键集合
     * @param roleId 角色主键
     * @return
     */
    Set<Long> listMenuIdByRoleId(Long roleId);

    /**
     * 新增数据
     *
     * @param form 表单数据
     * @return 主键
     */
    Long add(SysRoleForm form);

    /**
     * 修改数据
     *
     * @param form 表单数据
     * @return 是否修改成功。 true: 成功，false:失败
     */
    boolean update(SysRoleForm form);

    /**
     * 删除数据
     *
     * @param id 主键
     * @return 是否删除成功。 true: 成功，false:失败
     */
    boolean delete(Long id);

    /**
     * 列表查询
     *
     * @param searchForm 搜索条件
     * @return 列表数据
     */
    BasePage<SysRoleVO> page(SysRoleSearchForm searchForm);

    /**
     * 获取到有效的角色集合
     * @return
     */
     List<SysRoleVO> listValid();
}